gskpango: Fix a potential cairo_t leak
authorTimm Bäder <mail@baedert.org>
Mon, 21 Dec 2020 11:49:06 +0000 (12:49 +0100)
committerTimm Bäder <mail@baedert.org>
Mon, 21 Dec 2020 11:49:06 +0000 (12:49 +0100)
The previous early return did not cairo_destroy() it.

gtk/gskpango.c

index 9242a9bc86eb890bcf1c4a8d68faac8aa27b53a8..2fa53f06248f2c22becb64eac6a1108e5cbaaceb 100644 (file)
@@ -234,7 +234,6 @@ gsk_pango_renderer_draw_shape (PangoRenderer  *renderer,
                                int             y)
 {
   GskPangoRenderer *crenderer = (GskPangoRenderer *) (renderer);
-  cairo_t *cr;
   PangoLayout *layout;
   PangoCairoShapeRendererFunc shape_renderer;
   gpointer shape_renderer_data;
@@ -263,17 +262,21 @@ gsk_pango_renderer_draw_shape (PangoRenderer  *renderer,
 
   if (!handled)
     {
-      cr = gtk_snapshot_append_cairo (crenderer->snapshot, &crenderer->bounds);
+      cairo_t *cr;
 
       layout = pango_renderer_get_layout (renderer);
       if (!layout)
         return;
 
+      cr = gtk_snapshot_append_cairo (crenderer->snapshot, &crenderer->bounds);
       shape_renderer = pango_cairo_context_get_shape_renderer (pango_layout_get_context (layout),
                                                                &shape_renderer_data);
 
       if (!shape_renderer)
-        return;
+        {
+          cairo_destroy (cr);
+          return;
+        }
 
       set_color (crenderer, PANGO_RENDER_PART_FOREGROUND, cr);